# coding: utf-8

# html 解析器 
import re
import urlparse

from bs4 import BeautifulSoup


class HtmlParser(object):
    def parse(self, page_url, html_cont):
        if page_url is None or html_cont is None:
            return
        soup = BeautifulSoup(html_cont, 'html.parser', from_encoding='utf-8')
        new_urls = self._get_new_urls(page_url, soup)
        new_data = self._get_new_data(page_url, soup)
        return new_urls, new_data

    def _get_new_urls(self, page_url, soup):  # 解析并返回页面内容中的url列表
        new_urls = set()
        # 正则匹配要解析的链接格式
        links = soup.find_all('a', href=re.compile(r"/view/\d+\.htm"))
        for link in links:
            new_url = link['href']  # 获取a标签的href属性，即链接

            new_full_url = urlparse.urljoin(page_url, new_url)  # 拼接成完整的url
            #new_full_url = 'http://baike.sogou.com'+new_url

            new_urls.add(new_full_url)  # 添加到set中

        return new_urls

    def _get_new_data(self, page_url, soup):  # 获取网页信数据
        res_data = {}  # 创建字典

        # url
        res_data['url'] = page_url

        # <dd class="lemmaWgt-lemmaTitle-title"> <h1>Python</h1>
        title_node = soup.find('dd', class_='lemmaWgt-lemmaTitle-title').find('h1')
        res_data['title'] = title_node.get_text()  # 获取title

        # <div class="lemma-summary" label-module="lemmaSummary">  <div class="edit_abstract">
        summary_node = soup.find('div', class_='lemma-summary')
        res_data['summary'] = summary_node.get_text()

        return res_data
